<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <link rel="stylesheet" href="./lib/bootstrap.css" />
  <script src="./lib/jquery.js"></script>
</head>

<body style="padding: 15px;">
  <!-- 添加图书的Panel面板 -->
  <div class="panel panel-primary">
    <div class="panel-heading">
      <h3 class="panel-title">添加新图书</h3>
    </div>
    <div class="panel-body form-inline">

      <div class="input-group">
        <div class="input-group-addon">书名</div>
        <input type="text" class="form-control" id="iptBookname" placeholder="请输入书名">
      </div>

      <div class="input-group">
        <div class="input-group-addon">作者</div>
        <input type="text" class="form-control" id="iptAuthor" placeholder="请输入作者">
      </div>

      <div class="input-group">
        <div class="input-group-addon">出版社</div>
        <input type="text" class="form-control" id="iptPublisher" placeholder="请输入出版社">
      </div>

      <button id="btnAdd" class="btn btn-primary">添加</button>

    </div>
  </div>


  <!-- 图书的表格 -->
  <table class="table table-bordered table-hover">
    <thead>
      <tr>
        <th>Id</th>
        <th>书名</th>
        <th>作者</th>
        <th>出版社</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody id="tb">
      <!-- <tr>
        <td>704</td>
        <td>日落大道</td>
        <td>卡比丘</td>
        <td>长江出版社</td>
        <td><a href="javascript:;" class="del" data-id="704">删除</a></td>
      </tr> -->
    </tbody>
  </table>

  <script>
    $(function () {
      // jQ的方法
      //  1. $.get()
      //  2. $.post()
      //  3. $.ajax()  get post ... 方式


      // 获取图书列表数据，渲染到页面中展示
      // $.ajax({
      //   method: 'get',
      //   url: ''
      // })

      // 更简单的写法 $.get()
      //  不用带参数，表示来获取所有的图书
      // $.get('http://www.liulongbin.top:3006/api/getbooks', (res) => {
      //   console.log(res)
      //   console.log(res.data)
      //   console.log(res.msg)
      //   console.log(res.status)
      // })


      // 代码简化 - 上
      /* $.get('http://www.liulongbin.top:3006/api/getbooks', (res) => {
        // 表示从res对象中解构出 data, msg, status
        const { data, msg, status } = res

        console.log(data)
        console.log(msg)
        console.log(status)
      }) */

      // 代码简化 - 下  终极  由于以下代码需要进行复用，所以使用函数来进行封装
      function render() {
        $.get('http://www.liulongbin.top:3006/api/getbooks', ({ data, msg, status }) => {
          // console.log(data)
          // console.log(msg)
          // console.log(status)

          // 判断数据是否获取到了
          if (status !== 200) {
            return alert(`请求失败: ${msg}`)
          }

          // 走到这：说明啥： 说明数据获取成功
          //  data 数据进行渲染 （ map + join 、 forEach + 拼接字符串 ）
          const htmlStr = data.map(({ id, bookname, author, publisher }) => `
              <tr>
                <td>${id}</td>
                <td>${bookname}</td>
                <td>${author}</td>
                <td>${publisher}</td>
                <td><a href="javascript:;" class="del" data-id="${id}">删除</a></td>
              </tr>
            `
          ).join('')
          // console.log(htmlStr)

          // 给tbody设置内容
          $('#tb').html(htmlStr)
        })
      }
      // 页面一打开，发送请求，获取图书数据
      render()



      // 删除功能 ==> 是要把图书信息（ajax）发给服务器（服务器把这本书从数据库中删除掉）
      //  由于删除按钮是动态创建生成的，所以需要注册事件委托来完成功能
      $('#tb').on('click', '.del', function () {
        // 先获取图书的id， 用于发送请求
        const id = +$(this).attr('data-id')
        console.log(id)

        // $.delete 没有该方法，别乱造

        // $.ajax方法可以发送更多类型的请求方式
        $.ajax({
          // 对于delete请求方式，data中的数据并不会发送给服务器，手动带上（有格式要求:  url地址?id=值）
          method: 'DELETE',
          url: `http://www.liulongbin.top:3006/api/delbook?id=${id}`,
          // 要带上删除图书的id, 发现以下代码写了并没有发给服务器
          // data: {
          //   id
          // }
          success({ status, msg }) {
            if (status !== 200) {
              return alert(msg)
            }

            // 走到这，说明删除成功 ==> 调用render 重新渲染
            render()
          }
        })
      })
      // 添加功能 ==> 是要把图书信息（ajax）发给服务器（数据存到数据库）
      $('#btnAdd').on('click', function () {
        // 1. 获取输入框的数据
        const bookname = $('#iptBookname').val().trim() // '     哈哈     '
        const author = $('#iptAuthor').val().trim()
        const publisher = $('#iptPublisher').val().trim()
        console.log("🚀 ~ file: 06.图书管理.html:134 ~ bookname:", bookname, author, publisher)

        // 校验： 判断是否有内容，只要三个中有一个没有内容，ajax不用发送
        if (bookname === '' || author === '' || publisher === '') {
          return alert('请输入完整书籍信息')
        }

        // 2. ajax请求（带上数据）
        $.post('http://www.liulongbin.top:3006/api/addbook', {
          // 对象属性的简写
          bookname,
          author,
          publisher
        }, ({ status, msg }) => {
          // console.log(status, msg)

          // 判断
          if (status !== 201) {
            return alert(msg)
          }

          // 走到这，说明添加成功 ==> 重新发送ajax请求获取所有图书，进行渲染
          render()

          // 清空输入框
          $('#iptBookname').val('')
          $('#iptAuthor').val('')
          $('#iptPublisher').val('')
        })
      })
    })
  </script>

</body>

</html>